package com.example.design.c.observer.demo1;

import cn.hutool.core.collection.CollUtil;

import java.util.List;

/**
 * 抽象主题
 * 抽象目标
 */
public abstract class Subject {
    /**
     * 观察者集合
     */
    protected final List<Observer> observers = CollUtil.list(false);

    /**
     * 添加一个观察者
     */
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    /**
     * 删除一个观察者
     *
     * @param observer 需要删除的观察者对象
     */
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    /**
     * 核心方法
     * 通知观察者
     */
    protected abstract void notifyObservers();
}
